K8S 快速入门(十八)Helm 您所在的位置:网站首页 helm 原理 K8S 快速入门(十八)Helm

K8S 快速入门(十八)Helm

#K8S 快速入门(十八)Helm| 来源: 网络整理| 查看: 265

Helm

Helm 是 Kubernetes 的软件包管理工具。本文需要读者对 Docker、Kubernetes 等相关知识有一定的了解。 本文将介绍 Helm 中的相关概念和基本工作原理,并通过一些简单的示例来演示如何使用Helm来安装、升级、回滚一个 Kubernetes 应用。

1. helm的理解 1.1 Helm 是什么?

Helm 是 Kubernetes 的包管理器。包管理器类似于我们在 Ubuntu 中使用的apt、Centos中使用的 yum 或者Python中的 pip 一样,能快速查找、下载和安装软件包。Helm 由客户端组件 helm 和服务端组件 Tiller 组成,能够将一组K8S资源打包统一管理,是查找、共享和使用为Kubernetes构建的软件的最佳方式。

Helm类似于yum安装指令,统一对安装服务进行管理,使得用户不需要关系服务之间的依赖关系。

1.2 Helm 解决了什么痛点?

在 Kubernetes中部署一个可以使用的应用,需要涉及到很多的 Kubernetes 资源的共同协作。比如你安装一个 WordPress 博客,用到了一些 Kubernetes (下面全部简称k8s)的一些资源对象,包括 Deployment 用于部署应用、Service 提供服务发现、Secret 配置 WordPress 的用户名和密码,可能还需要 pv 和 pvc 来提供持久化服务。并且 WordPress 数据是存储在mariadb里面的,所以需要 mariadb 启动就绪后才能启动 WordPress。这些 k8s 资源过于分散,不方便进行管理,直接通过 kubectl 来管理一个应用,你会发现这十分蛋疼。

所以总结以上,我们在 k8s 中部署一个应用,通常面临以下几个问题:

如何统一管理、配置和更新这些分散的 k8s 的应用资源文件如何分发和复用一套应用模板如何将应用的一系列资源当做一个软件包管理

K8s有非常多资源对象,部署一个服务时候,往往需要操作多个服务资源对象,且资源对象相互依赖,非常不好管理。Helm帮助管理资源对象。

1.3 Helm 相关组件及概念

Helm 包含两个组件,分别是 helm 客户端 和 Tiller 服务器:

helm 是一个命令行工具,用于本地开发及管理chart,chart仓库管理等Tiller 是 Helm 的服务端。Tiller 负责接收 Helm 的请求,与 k8s 的 apiserver 交互,根据chart 来生成一个 release 并管理 releasechart Helm的打包格式叫做chart,所谓chart就是一系列文件, 它描述了一组相关的 k8s 集群资源release 使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 ReleaseRepoistory Helm chart 的仓库,Helm 客户端通过 HTTP 协议来访问存储库中 chart 的索引文件和压缩包 1.4 Helm 原理

下面两张图描述了 Helm 的几个关键组件 Helm(客户端)、Tiller(服务器)、Repository(Chart 软件仓库)、Chart(软件包)之间的关系以及它们之间如何通信,如下图(helm通信组件) 在这里插入图片描述

1.5 helm架构

在这里插入图片描述

创建release

helm 客户端从指定的目录或本地tar文件或远程repo仓库解析出chart的结构信息helm 客户端指定的 chart 结构和 values 信息通过 gRPC 传递给 TillerTiller 服务端根据 chart 和 values 生成一个 releaseTiller 将install release请求直接传递给 kube-apiserver

删除release

helm 客户端从指定的目录或本地tar文件或远程repo仓库解析出chart的结构信息helm 客户端指定的 chart 结构和 values 信息通过 gRPC 传递给 TillerTiller 服务端根据 chart 和 values 生成一个 releaseTiller 将delete release请求直接传递给 kube-apiserver

更新release

helm 客户端将需要更新的 chart 的 release 名称 chart 结构和 value 信息传给 TillerTiller 将收到的信息生成新的 release,并同时更新这个 release 的 historyTiller 将新的 release 传递给 kube-apiserver 进行更新 1.6 chart 的基本结构

k8s编程非常麻烦,资源对象非常多,因此helm就是一种k8s项目开发的方式,且k8s项目开发有固定项目结构。

Helm的打包格式叫做chart,所谓chart就是一系列文件, 它描述了一组相关的 k8s 集群资源。Chart中的文件安装特定的目录结构组织, 最简单的chart 目录如下所示: 在这里插入图片描述

charts 目录存放依赖的chartChart.yaml 包含Chart的基本信息,包括chart版本,名称等templates 目录下存放应用一系列 k8s 资源的 yaml 模板_helpers.tpl 此文件中定义一些可重用的模板片断,此文件中的定义在任何资源定义模板中可用NOTES.txt 介绍chart 部署后的帮助信息,如何使用chart等values.yaml 包含了必要的值定义(默认值), 用于存储 templates 目录中模板文件中用到变量的值 2. helm安装

Helm 提供了几种安装方式,本文提供两种安装方式,想要查看更多安装方式,请阅读 Helm 的官方文档:

下载地址:https://github.com/helm/helm/releases

# ======= 第一种安装方式: 手动方式安装 ======== # 下载 Helm 二进制文件 wget https://storage.googleapis.com/kubernetes-helm/helm-v2.9.1-linuxamd64.tar.gz # 解压缩 tar -zxvf helm-v2.9.1-linux-amd64.tar.gz # 复制 helm 二进制 到bin目录下,但是要确保/usr/local/bin/在环境变量里配置过 cp linux-amd64/helm /usr/local/bin/ # ======= 第二种安装方式: 使用官方二进制脚本进行安装 ======== curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh chmod 700 get_helm.sh ./get_helm.sh # 你还可以通过 Helm 的 github 项目下找到你想要的 Helm 版本的二进制,然后通过手动安装方式一样安装即可

在这里插入图片描述

在这里插入图片描述

看到Client端好了,Server端还没好

3. tiller安装

helm 由客户端helm和服务端tiller组成,而helm3.0之后它去掉了tiller,而直接与k8s通讯,可以说在部署上更简单了,而今天我们主要还是部署2.x版本的helm.

安装好 helm 客户端后,就可以通过以下命令将 Tiller 安装在 kubernetes 集群中:

首先tiller作为pod运行,需要一个集群角色的用户:

apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system

在这里插入图片描述

在这里插入图片描述

初始化tiller,自动安装:

# 构建rbac kubectl create -f rbac-config.yaml # 初始化tiller helm init --service-account tiller --skip-refresh # 查看tiller的pod信息 kubectl get pods -n kube-system | grep tiller

在这里插入图片描述

在这里插入图片描述

看到运行了一个tiller的pod,但是处于镜像下载失败状态

查看详情: 在这里插入图片描述

在这里插入图片描述

看到下载地址是国外的,可以从阿里云下载对应的版本

# Pulling image "gcr.io/kubernetes-helm/tiller:v2.15.2 发现下载镜像tiller:v2.15失败 # 镜像从阿里云平台下载,然后命名为使用的默认的镜像:gcr.io/kuberneteshelm/tiller:v2.15.2 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.15.2 # 打包镜像 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.15.2 gcr.io/kubernetes-helm/tiller:v2.15.2 # 然后把镜像上传到其他2个node节点即可,tiller安装将会优先使用本地镜像

在这里插入图片描述

将从阿里云下载的换个名字打包,并上传到其他所有node节点 在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

等待一会儿后发现启动成功 在这里插入图片描述 在这里插入图片描述

到现在为止,client和server端都安装成功。

# 查询helm是否安装成功 helm version # 其他的安装方式: 可以指定阿里云镜像 helm init --upgrade -i registry.cnhangzhou.aliyuncs.com/google_containers/tiller:v2.15.2 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts 4. Helm工程开发 4.1 创建Chart.yaml

指定工程名称 和 版本。

# 创建文件夹 mkdir hello-helm cd hello-helm # 创建自描述文件 Chart.yaml , 这个文件必须有 name 和 version 定义 cat { .Values.image.tag }} ports: - containerPort: 8080 rotocol: TCP EOF

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.6 动态更新配置文件

现在如果我们想要发布新版本,直接修改values.yaml

在这里插入图片描述

# 修改配置文件更新 helm upgrade RELEASE_NAME .

改成v2,然后执行更新命令 在这里插入图片描述

等一会儿 在这里插入图片描述

变v2了 在这里插入图片描述

在 values.yaml 中的值可以被部署 release 时用到的参数 --values YAML_FILE_PATH 或 – set key1=value1, key2=value2 覆盖掉:

# 在 values.yaml 中的值可以被部署 release 时用到的参数 --values YAML_FILE_PATH 或 -- set key1=value1, key2=value2 覆盖掉 helm install --set image.tag='v3' . helm upgrade RELEASE_NAME --set image.tag='v3' . # 升级版本 helm upgrade -f values.yaml test .

还可以通过更简洁的方式: 在这里插入图片描述 在这里插入图片描述

在这里插入图片描述

5. Debug

使用模板动态生成K8s资源清单,非常需要能提前预览生成的结果。 使用–dry-run --debug 选项来打印出生成的清单文件内容,而不执行部署

helm install . --dry-run --debug --set image.tag=latest


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有